package org.jeecg.modules.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.system.entity.SysEmployee;

/**
 * 员工信息表 服务接口
 */
public interface ISysEmployeeService extends IService<SysEmployee> {

    /**
     * 分页查询员工列表
     *
     * @param page     分页参数
     * @param employee 查询条件
     * @return 员工分页列表
     */
    IPage<SysEmployee> getEmployeePageList(Page<SysEmployee> page, SysEmployee employee);

    /**
     * 添加员工信息
     *
     * @param employee 员工信息
     * @return 是否成功
     */
    boolean addEmployee(SysEmployee employee);

    /**
     * 编辑员工信息
     *
     * @param employee 员工信息
     * @return 是否成功
     */
    boolean editEmployee(SysEmployee employee);

    /**
     * 删除员工信息
     *
     * @param id 员工ID
     * @return 是否成功
     */
    boolean deleteEmployee(String id);

    /**
     * 批量删除员工信息
     *
     * @param ids 员工ID数组
     * @return 是否成功
     */
    boolean deleteBatchEmployee(String[] ids);

    /**
     * 根据员工编号查询员工信息
     *
     * @param empNo 员工编号
     * @return 员工信息
     */
    SysEmployee getEmployeeByEmpNo(String empNo);

    /**
     * 检查员工编号是否已存在
     *
     * @param empNo 员工编号
     * @param id    员工ID（编辑时排除自身）
     * @return 是否存在
     */
    boolean checkEmpNoExists(String empNo, String id);

    /**
     * 检查部门是否存在员工
     *
     * @param departId 部门ID
     * @return 是否存在员工
     */
    boolean checkDepartHasEmployee(String departId);


    /**
     * 根据员工编号和密码验证员工登录
     * 
     * @param username 员工编号
     * @param password 密码
     * @param tenantId 租户ID
     * @return 员工信息
     */
    SysEmployee checkEmployeeLogin(String username, String password, Integer tenantId);

    /**
     * 更新员工登录密码
     * 
     * @param empId 员工ID
     * @param newPassword 新密码
     * @return 是否成功
     */
    boolean updateEmployeePassword(String empId, String newPassword);

    /**
     * 根据角色ID获取员工列表
     *
     * @param page 分页参数
     * @param roleId 角色ID
     * @param empNo 员工编号（可选，用于模糊查询）
     * @return 员工分页列表
     */
    IPage<SysEmployee> getEmployeeByRoleId(Page<SysEmployee> page, String roleId, String empNo);

    SysEmployee getEmployeeByUsername(String approveBy);
} 